객체 지향 프로그래밍

객체 지향 프로그래밍이란 실세계에서의 개념을 추상화하여 프로그래밍 상의 객체로 옮겨 놓는 방식으로 코드를 작성하는 방법을 말한다. 예를 들면 자동차라는 객체를 프로그래밍 하려면 자동차의 특성과 기능을 추려 이를 프로그래밍 할 수 있다. 자동차는 바퀴,헤드라이트, 핸들, … 등을 가지고 전진, 후진, 방향 전환 등의 기능을 가지고 있다. 이러한 특성과 기능을 모아 자동차라는 객체 클래스를 만들면 추가적인 특성을 가진 자동차 객체를 코딩하거나 자동차 객체를 여러개 생성하게 될 때 등등 코드를 재사용률이 커진다.

객체 지향 프로그래밍에는 4가지 특성과 5가지의 설계원칙이 있다.

객체지향 4가지 특성

  • 추상화 - 추상화란 현실 세계의 객체의 공통된 특징과 기능을 추출하는 것을 의미한다. 동물은 사자, 원숭이, 코끼리 등등 많은 것이 존재하지만 이 동물들의 기본적인 특성과 기능을 모아 동물이라는 클래스를 정의하는 것을 추상화라고 한다. 동물은 모두 호흡을하고 심장을가지고 있으며 움직인다라는 특성과 기능을 가지고 있는데 이러한 것들을 한군데 모아 정의하는 것을 의미한다.

  • 다형성 - 다형성에는 오버로딩과 오버라이딩이 있다. 똑같은 이름의 함수여도 함수의 인자의 갯수나 타입, 상속 받은 객체에서의 오버라이딩에 대해서 다르게 동작하는 것을 의미한다.

    • 오버로딩은 파라미터의 개수나 타입이 다른 함수를 정의하는 것을 의미한다. 예를 들어 두 정수를 더하는 public void sum(int a,int b)라는 함수를 정의했다고 하면 두 실수를 더하기 위한 함수인 public void sum(double a,double b)함수를 정의할 수 있다. 이 함수는 똑같은 이름으로 호출하지만 집어넣는 인자의 타입에 따라 다른방식으로 동작할 수 있다.

    • 오버라이딩은 상속에 의해 부모가 가진 함수를 재정의 하여 사용하는 것을 의미한다. 부모 객체가 ‘안녕 나는 부모’라는 메시지를 출력하는 say()라는 함수를 가지고 있다고 하면 자식 객체는 부모 객체를 상속받으면서 이 함수에 대해 오버라이딩을 하여 ‘안녕 나는 자식’이라는 메시지를 출력하도록 변경할 수 있다.

  • 상속성 - 상속성은 부모 객체의 특성을 자식이 물려받는 것을 의미한다. 상속을 통해 부모가 가진 기능에 대하여 물려받아 사용할 수 있다. 예를 들어 자동차라는 클래스를 상속받은 슈퍼카 클래스는 기본 기능인 전진, 후진, 방향 전환 등의 기능을 모두 물려받고 자신의 특성인 부스트, 드리프트 기능등 자신의 특징만 추가하면된다.

  • 캡슐화 - 캡슐화란 클래스가 동작하는 것에 대해 사용자가 그 내부 동작을 모르게 동작한다는 것을 의미한다. 예를 들어 환자는 감기약이라는 캡슐 알약 하나를 먹지만 캡슐 알약에는 항생제, 수면제, 등등 많은 작용을 하는 성분들이 들어가 있고 작용을 하지만 환자는 이를 알 수 없다. 이처럼 클래스는 자신이 동작하는 것에 대해 사용자가 알 필요가 없이 동작하는 것을 캡슐화라고 한다.

객체지향 5가지 설계 원칙

  • SRP(Single Responsibility Principle) 단일 책임 원칙
    • 클래스는 단 하나의 기능을 가지고 클래스가 제공하는 모든 서비스는 그 하나의 기능을 수행하는 데 집중해 있어야 한다.
  • OCP(Open - Closed Principle) 개방 폐쇄의 원칙
    • 확장에는 열려있고 변경에는 닫혀있어야 한다.
  • LSP(Liskov Substitution Principle) 리스코프 치환 원칙
    • 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
  • ISP(Interface Segregation Principle) 인터페이스 분리 원칙
    • 인터페이스는 그 인터페이스를 사용하는 사용자 기준으로 분리해야 한다.
  • DIP(Dependency Inversion Principle) 의존 역전의 법칙
    • 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.

5가지 설계 원칙 참고

공유하기